Computers communicating over a network are often categorized as sending computers and receiving computers, where a sending computer may send data to a receiving computer over a network connection. In some circumstances, sending and receiving computers may have different processing speeds or resources for transmitting and consuming data. A receiving computer may store received data in a receive buffer temporarily until an application processes the data.
Protocols, such as the Transmission Control Protocol (TCP) for example, define a receive window for the receiving computer, which is the maximum amount of data that the sending computer is allowed to send to the receiving computer before receipt of at least some of the data is acknowledged. The receive window may limit the amount of data (e.g., defined in bytes) that the sending computer may have outstanding (i.e., unacknowledged) to the receiving computer at any given time. Once the sending computer sends the maximum amount of data, the sending computer may not be allowed to send more data until it receives an acknowledgement that at least some of the data has been received.
Some operating systems provide receive windows that are statically-configured and require a manual change the size of the receive window. Other operating systems provide adaptive tuning receive windows, such as dynamic rightsizing, which may increase the receive window size in predetermined increments based on estimates. However, these systems suffer from inaccurate estimates leading to suboptimal receive window sizes, thereby negatively affecting performance of the network connection.